<?php

namespace app\controller;

use app\exception\PasswordErrorException;
use app\exception\TokenExpiredException;
use app\exception\UserNotFoundException;
use think\Request;
use app\model\User as UserModel;
use think\response\Json;


class User
{

    /**
     * 用户登录
     * @param Request $request
     * @return Json 用户信息
     */
    public function login(Request $request)
    {
        // 接收参数（学号，密码）
        $studentNumber = $request->post("studentNumber","");
        $password = $request->post("password","");

        // 判断参数合法性
        if (empty($studentNumber) || empty($password)) {
            return json([
                'code' => 400,
                'msg' => "用户名或密码不能为空！"
            ]);
        }


        // 查询用户信息
        try {
            $result = UserModel::login($studentNumber, $password);

            // 登录成功
            return json([
                'code' => 200,
                'msg'  => '登录成功',
                'data' => $result
            ]);

        }catch (UserNotFoundException | PasswordErrorException $e){

            // 用户不存在 或 密码错误
            return json([
                'code' => $e->getCode(),
                'msg'  => $e->getMessage()
            ]);

        }catch (\Exception $e){

            // 系统异常
            return json([
                'code' => 500,
                'msg'  => '系统异常'
            ], 500);
        }

    }

    /**
     * 登录状态验证
     */
    public function isLogin(Request $request)
    {
        // 接收参数（token）
        $token = $request->post("token","");

        // 判断参数合法性
        if (empty($token)) {
            return json([
                'code' => 400,
                'msg' => 'token不能为空'
            ]);
        }

        try {
            UserModel::isLogin($token);

            // 处于登录状态
            return json([
                'code' => 200,
            ]);

        }catch (TokenExpiredException $e){

            // 登录过期
            return json([
                'code' => $e->getCode(),
                'msg'  => $e->getMessage()
            ]);

        }catch (\Exception $e){

            return json([
                'code' => 500,
                'msg'  => '系统异常'
            ]);

        }

    }
}
